package com.ssy.lingxi.order.service.feign;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.api.model.vo.request.*;
import com.ssy.lingxi.order.api.model.vo.response.*;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import java.util.List;

/**
 * 订单服务对外OpenFeign接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-31
 */
public interface IOrderFeignService {
    /**
     *  查询（供应）会员交易流程规则配置
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderTradeProcessFeignDetailVO> findVendorTradeProcess(OrderTradeProcessFeignVO feignVO);

    /**
     * 查询（采购）会员采购流程规则配置
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderPurchaseProcessFeignDetailVO> findBuyerPurchaseProcess(OrderPurchaseProcessFeignVO feignVO);

    /**
     * 查询平台后台 - 会员支付策略设置
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<PlatformPayTypeFeignDetailVO>> findPlatformPayments(OrderMemberFeignVO feignVO);

    /**
     * 查询支付参数
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<PaymentParameterFeignDetailVO> findPaymentParameters(OrderPayParameterFeignVO feignVO);

    /**
     * 查询支付参数（直接查询平台支付参数配置）
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<PaymentParameterFeignDetailVO> findPlatformPaymentParameters(OrderPayChannelFeignVO feignVO);

    /**
     * 查询支付参数（直接查询会员支付参数配置）
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<PaymentParameterFeignDetailVO> findMemberPaymentParameters(OrderPayParameterFeignVO feignVO);

    /**
     * 售后服务 - 更新订单商品的换货、退货、维修数量、退款金额
     * @param afterSales 接口参数
     * @return 更新结果
     */
    Wrapper<Void> updateAfterSaleOrderProduct(List<OrderAfterSaleVO> afterSales);

    /**
     * 售后服务 - 更新订单商品的实际退款金额
     * @param orderReturnAmountUpdateVO  接口参数
     * @return 更新结果
     */
    Wrapper<Void> updateAfterSaleOrderProductAmount(OrderReturnAmountUpdateVO orderReturnAmountUpdateVO);

    /**
     * 售后服务 - 查询订单商品的换货、退货、维修数量、退款金额
     * @param orderProductIds 订单商品Id列表
     * @return 查询结果
     */
    Wrapper<List<OrderAfterSaleProductFeignDetailVO>> findAfterSaleOrderProducts(List<OrderProductIdFeignVO> orderProductIds);

    /**
     * 售后服务 - 批量查询订单外部状态
     * @param feignVO 订单Id列表
     * @return 查询结果
     */
    Wrapper<List<OrderAfterSaleStatusVO>> findAfterSaleOrderStatuses(OrderIdsFeignVO feignVO);

    /**
     * 售后服务 - 根据合同Id查询订单列表
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderAfterSaleOrderContractFeignVO>> findAfterSaleOrderContracts(OrderContractFeignVO feignVO);

    /**
     * 售后能力 - 查询已经确认支付结果的支付记录列表
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderAfterSalePaymentFeignDetailVO>> findAfterSaleOrderPayments(OrderIdsFeignVO feignVO);

    /**
     * 物流能力 - 确认物流单后，更新订单的物流单号
     * @param feignVO 接口参数
     * @return 更新结果
     */
    Wrapper<Void> updateOrderLogisticsNo(OrderUpdateLogisticsNoFeignVO feignVO);

    /**
     * 加工能力 - 更新订单商品加工数量
     * @param feigns 接口参数
     * @return 更新结果
     */
    Wrapper<Void> updateOrderProductEnhanceCount(List<OrderUpdateEnhanceFeignVO> feigns);

    /**
     * 结算服务 - 查询订单发票信息
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderSettleAccountInvoiceFeignDetailVO> findSettleAccountInvoiceDetail(OrderNoFeignVO feignVO);

    /**
     * 会员服务 - 订单评论完成后，更改订单评论状态
     * @param feignVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateOrderComment(OrderCommentFeignVO feignVO);

    /**
     * 支付服务 - 订单服务回调
     * @param callbackFeignVO 回调参数
     * @return 操作结果
     */
    Wrapper<Void> orderPayCallback(OrderPayCallbackFeignVO callbackFeignVO);

    /**
     * 售后服务 - 订单会员信息校验
     * @param checkVO 请求参数
     * @return 操作结果
     */
    Wrapper<Boolean> checkAfterSaleOrderMember(CheckOrderMemberAfterSaleVO checkVO);

    /**
     * 查询启用的结算支付类型
     * @return 查询启用的结算支付类型
     */
    Wrapper<List<PlatformSettlementTypeVO>> findSettlementTypeByStatusEqualEnable();

    /**
     * 查询会员角色下通联支付的结算渠道
     * @param queryVO 查询条件
     * @return 通联支付的结算渠道
     */
    Wrapper<List<MemberSettleChannelVO>> findSettlementChannel(MemberSettleChannelQueryVO queryVO);

    /**
     * 查询平台规则配置
     * @param feignVO 查询条件
     * @return 查询结果
     */
    Wrapper<List<OrderRuleDetailVO>> findOrderRules(OrderRuleDetailFeignVO feignVO);

    /**
     * 营销服务 - 查询订单商品信息
     * @param feignVO 查询条件
     * @return 查询结果
     */
    Wrapper<List<OrderMarketingDetailVO>> findOrderMarketingProducts(OrderMarketingFeignVO feignVO);

    /**
     * 会员服务 - 查询订单供应会员会员Logo、或店铺Logo、或自营商城Logo
     * @param feignVO 接口参数
     * @return 修改结果
     */
    Wrapper<List<OrderVendorLogoFeignVO>> findOrderVendorLogo(OrderFeignIdsVO feignVO);

    /**
     * 结算能力 - 新增请款单-查询请款类型和付款方过滤采购订单数据
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<OrderBuyerSettleQueryVO>> pageSettleBuyerOrders(OrderBuyerSettlePageVO pageVO);

    /**
     * 结算服务 - 付款完成后修改订单收发货记录状态为已结算
     * @param feignVO 接口参数
     */
    void updateOrderDeliveries(@RequestBody @Valid OrderUpdateDeliveriesFeignVO feignVO);

    /**
     * 结算服务 - 协同对账 - 对账单生成请款单采购订单数据
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderBuyerSettleReconciliationFeignVO>> settleReconciliationBuyerOrders(OrderFeignIdsVO feignVO);

    /**
     * “售后服务” - 查询订单商品使用“平台优惠券”后的优惠抵扣金额
     * @param feignVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<OrderProductCouponFeignVO>> findOrderProductCouponAmounts(OrderFeignIdsVO feignVO);

    /**
     * “搜索服务” - 批量查询会员满额包邮配置
     * @param feignVO
     * @return
     */
    Wrapper<List<OrderFreeExpressConfigVO>> getOrderFreeExpressConfigList(OrderFreeExpressFeignVO feignVO);

    /**
     * “搜索服务” - 批量查询会员积分抵扣订单金额配置
     * @param feignVO
     * @return
     */
    Wrapper<List<OrderScoreConfigVO>> getOrderScoreConfigList(OrderScoreFeignVO feignVO);

    /**
     * 根据物料信息查询订单(商品能力- 物料价格库)
     * @author lxc
     * @date 2022/4/2
     **/
    Wrapper<OrderPriceQueryVO> goodsPriceByGoods(OrderPriceQueryRequest request);
}
